package com.aqie.seller.sign;

import com.aqie.seller.service.SignService;
import com.aqie.util.RSAUtil;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.Assert;

/**
 * 验签aop
 */
@Component      // 添加spring 注解
@Aspect         // 告诉Spring 这是一个切面
public class SignAop {

    // 注入签名服务
    @Autowired
    private SignService signService;

    /**
     * 进行验签, 在执行具体方法之前进行拦截 @Before
     * 切入点：包下面任何类的任何方法,传递授权编号,签名以及实现了签名明文接口的参数
     * @param authId  根据授权编号获取对象公钥
     * @param sign    签名
     * @param text    明文
     */
    @Before(value = "execution(* com.aqie.seller.controller.*.*(..)) && args(authId,sign,text,..)")
    public void verify(String authId,String sign,SignText text){
        String publicKey = signService.getPublicKey(authId);
        Assert.isTrue(RSAUtil.verify(text.toText(),sign,publicKey),"验签失败");
    }
}
